import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'
import { getTimeStamp } from './auth'
// 调用之前先关闭已有的所有弹框 (只显示一个)
// import oneMessage from '@/utils/resetMessage'

// create an axios instance
const service = axios.create({
  // process.env 环境变量 必须以VUE_APP_ 开头
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时时间
  timeout: 5000
})

const TIME_OUT = 3600

function IsCheckTimeOut() {
  return (Date.now() - getTimeStamp()) / 1000 > TIME_OUT
}

// 请求拦截器
service.interceptors.request.use((config) => {
  if (store.getters.token) {
    config.headers.Authorization = `Bearer ${store.getters.token}`
    if (IsCheckTimeOut()) {
      store.dispatch('user/logout')
      router.push('/login')
      return Promise.reject(new Error('token过期了'))
    }
  }
  return config
}, (error) => {
  return Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use((response) => {
  const { success, data, message } = response.data
  if (success) {
    return data
  } else {
    Message.error(message)
    // Message({
    //   type: 'error',
    //   message,
    //   offset: 55
    // })
    // 失败返回一个Promise对象
    return Promise.reject(new Error(message))
  }
}, (error) => {
  // Message.error(error.response.data.message)
  // if (error.response && error.response.data && error.response.data.code === 10002) {
  if (error.response?.data?.code === 10002) {
    store.dispatch('user/logout')
    router.push('/login')
    Message.error('token 过期了')
  } else {
    Message.error(error.message)
    // oneMessage({
    //   type: 'error',
    //   message: error.message
    // })
    // oneMessage.success(error.message)
  }
  // else if (error.code === 'ECONNABORTED') {
  //   store.dispatch('user/logout')
  //   router.push('/login')
  //   Message.error('响应超时,请重新登录! ')
  // }
  return Promise.reject(error)
})

export default service
